import pytest
from playwright.sync_api import sync_playwright, Page, BrowserContext
from config.settings import BASE_URL


# 会话级 fixture：整个测试会话只执行一次登录
@pytest.fixture(scope="session")
def logged_in_context():
    print("\n=== 初始化会话级上下文 ===")
    with sync_playwright() as p:
        # 复用本地用户数据目录（缓存、cookies 等），路径自定义
        context = p.chromium.launch_persistent_context(
            user_data_dir=r"C:\Users\zhang\Desktop\gitcode\playwright_cache",
            headless=False,
            args=[
                "--disable-extensions",  # 禁用扩展
                "--disable-gpu",  # 禁用GPU渲染（非图形界面场景）
                "--no-first-run",  # 跳过首次运行设置
                "--no-default-browser-check",  # 跳过默认浏览器检查
                "--disable-blink-features=AutomationControlled",  # 可选：避免被网站检测为自动化工具
                "--start-maximized",
            ],
            no_viewport=True
            # timeout=60
        )

        page = context.new_page()
        page.goto(BASE_URL)

        # 登录
        page.get_by_role("textbox").first.fill("001")
        page.get_by_role("textbox").nth(1).fill("tester")
        page.locator("input[type=\"password\"]").fill("Tester01")
        page.get_by_role("button", name="登 录").click()
        page.wait_for_url(f"{BASE_URL}/home", timeout=10000)  # 等待跳转到目标域名下的任意页面，超时10秒

        # page.wait_for_timeout(1000)
        # page.wait_for_url("http://82.157.20.38/**")  # 等待登录跳转

        yield context  # 传递登录后的上下文给测试用例

        context.close()  # 测试会话结束后，关闭浏览器


# 辅助 fixture：从会话级 context 中获取新页面（每个用例独立使用新页面）
@pytest.fixture
def page(logged_in_context):
    page = logged_in_context.new_page()
    yield page
    page.close()  # 每个用例结束后关闭页面（避免干扰）
